前一陣子,L幫公司寫了一個自動化安裝系統的程式,
有一堆必要Component,x86、x64的安裝檔案不同,例如:Windows Installer 4.5。
於是,為了讓所有系統都可以達到自動辨識、安裝的目的,寫了以下一段程式,用來辨識OS是否為64位元。
前一陣子,L幫公司寫了一個自動化安裝系統的程式,
有一堆必要Component,x86、x64的安裝檔案不同,例如:Windows Installer 4.5。
於是,為了讓所有系統都可以達到自動辨識、安裝的目的,寫了以下一段程式,用來辨識OS是否為64位元。
先解說一下基本的原理:
辨識的原理,其實很簡單,基本的原理是透過檢查作業系統的『CPU定址長度』來判定。
32位元的作業系統,CPU定址長度會是32bit,即使使用的實體CPU是64位元的,OS仍會判定是32bit。
64位元,就沒有這種問題啦,不是64位元的CPU,應該也裝不了64位元的OS。
以下是判斷的程式碼:
private bool DetectIf64bit()
{
bool Is64Bit;
ObjectQuery objQry;
System.Management.ManagementScope mngScope;
System.Management.ConnectionOptions connOpt = new ConnectionOptions();
System.Management.ManagementObjectSearcher searcher;
//-----設定 WMI 連接資訊-----
connOpt.Username = ""; // 登入系統的帳號
connOpt.Password = ""; // 密碼
connOpt.Authentication = AuthenticationLevel.Default; // 連線驗證方式
mngScope = new ManagementScope();
mngScope.Path = new ManagementPath(@"\\.\root\cimv2");
mngScope.Connect();
//----- 透過WMI擷取CPU定址長度資訊
objQry = new ObjectQuery("SELECT * FROM Win32_Processor");
searcher = new ManagementObjectSearcher(mngScope, objQry);
Is64Bit = false;
foreach (ManagementObject QryObj in searcher.Get())
{
if (QryObj.GetPropertyValue("AddressWidth").ToString().Trim() == "64")
{
Is64Bit = true;
break;
}
}
return (Is64Bit);
}
這個辨識方法,已於Windows XP/Vista/2003/2008/7 實際測試,請安心服用...XDD